package com.ly.lypopupwindowdemo.activity;

import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

import com.ly.lypopupwindowdemo.R;
import com.ly.lypopupwindowdemo.service.MyService;

public class ServiceTestActivity extends AppCompatActivity implements View.OnClickListener{



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_service_test);

        findViewById(R.id.start_service).setOnClickListener(this);
        findViewById(R.id.stop_service).setOnClickListener(this);
        findViewById(R.id.bind_service).setOnClickListener(this);
        findViewById(R.id.unbind_service).setOnClickListener(this);
        findViewById(R.id.foreground_service).setOnClickListener(this);

    }

    private MyService.DownloadBinder downloadBinder;


    private ServiceConnection connection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //活动与服务成功绑定时候调用
            /**
             * 通过向下转型得到DownloadBinder实例
             * 然后就可以任意调用DownloadBinder中的public方法
             * 即实现了只会Service干什么就干什么
             */
            downloadBinder = (MyService.DownloadBinder) service;
            downloadBinder.startDownload();
            downloadBinder.getProgress();
        }

        @Override
        public void onServiceDisconnected(ComponentName name) {
            //活动与服务解除绑定时候调用
        }
    };


    @Override
    public void onClick(View v) {

        switch (v.getId()){
            case R.id.start_service:
                Intent intent = new Intent(ServiceTestActivity.this, MyService.class);
                startService(intent);
                break;
            case R.id.stop_service:
                Intent stopIntent = new Intent(ServiceTestActivity.this,MyService.class);
                stopService(stopIntent);
                break;
            case R.id.bind_service:
                /**
                 * 绑定服务的时候接收三个参数
                 * 第一个参数就是intent,第二个参数是我们创建的ServiceConnection,
                 * 第三个参数是标志位，BIND_AUTO_CREATE表示服务和活动绑定后自动创建服务，这会使MyService中的onCreate执行但onStartCommand不执行
                 *
                 * 另外一个知识点，任何一个服务在整个应用程序内都是通用的，即MyService不仅可以和ServiceTestActivity绑定
                 * 还可以和任何一个其它活动进行绑定。而且绑定后都可以获得相同的DownloadBinder实例。
                 */
                Intent bindIntent = new Intent(this,MyService.class);
                bindService(bindIntent,connection,BIND_AUTO_CREATE);
                break;
            case R.id.unbind_service:
                unbindService(connection);
                break;
            case R.id.foreground_service:
                /**
                 * 服务几乎都是后台默默工作，服务的优先级比较低，当系统内存不足的时候
                 * 就会有可能被回收，如果你希望服务一直运行不被回收，那么就可以创建一个
                 * 前台服务。
                 * 前台服务和后台服务的区别就是在于，它会一直有一个图标在系统的状态栏显示。
                 * 非常类似与通知的效果。比如果天气预报应用经常有这个功能需求。
                 */

                break;
            default:
                break;
        }

    }
}
